package cn.itsource.controller;
import cn.itsource.domain.Teacher;
import cn.itsource.service.ITeacherService;
import cn.itsource.util.ExcelUtil;
import cn.itsource.util.JSONResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

// 标注类为控制器类
@RestController
// 前端访问接口
@RequestMapping("/teacher")
public class TeacherController {
    // spring自动注入对象
    @Autowired
    private ITeacherService teacherService;

    // 添加或者修改数据
    @PostMapping
    // RequestBody前端必须传入json数据
    public JSONResult<Teacher> save(@RequestBody Teacher teacher){
        try {
            // 执行save方法进行增改数据
            teacherService.save(teacher);
            // 打印成功信息
            return JSONResult.ok();
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            // 打印失败
            return JSONResult.fail();
        }
    }

    // 删除指定数据
    @DeleteMapping("/{id}")
    // 使用PathVariable接受id进行删除数据
    private JSONResult<Teacher> delete(@PathVariable("id") Long id){
        try {
            // 删除数据
            teacherService.delete(id);
            return JSONResult.ok();
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    // 查询指定数据
    @GetMapping("/{id}")
    // 使用PathVariable接受id进行删除数据
    private JSONResult<Teacher> get(@PathVariable("id") Long id){
        try {
            // 查询指定信息并打印信息
            return JSONResult.ok(teacherService.get(id));
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    // 查询所有信息
    @PatchMapping
    public JSONResult<Teacher> gteAll(Teacher teacher){
        try {
            // 打印出所有的数据
            return JSONResult.ok(teacherService.getAll());
        }catch (Exception e){
            // 打印异常信息在程序中出错的位置及原因
            e.printStackTrace();
            return JSONResult.fail();
        }
    }

    // 下载模板
    @GetMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) throws IOException {

        ExcelUtil.exportExcel(new ArrayList<>(),"教师列表","教师",Teacher.class,"教师表",response);
    }

    // 上传文件
    @PostMapping("/importExcel")
    public JSONResult importExcel(MultipartFile file) {
        try {
            // 获取上传的文件及其配置
            List<Teacher> teachers = ExcelUtil.importExcel(file,1,1,Teacher.class);
            // 调用批量插入数据方法
            teacherService.bitchInsert(teachers);
            // 返回信息
            return JSONResult.ok();
        } catch (IOException e) {
            return JSONResult.fail("导入失败" + e.getMessage());
        }
    }

    // 导出表数据
    @GetMapping("/exportExcel")
    public void exportExcel(HttpServletResponse response){
        try {
            // 获取所有的数据，将数据按指定格式输出
            ExcelUtil.exportExcel(teacherService.getAll(),"教师列表","教师信息",Teacher.class,"teacher",response);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
